#include "gui/gui_controller.h"

#include "gui/gui.h"
#include "gui/gui_toolbar.h"
#include "gui/gui_infobar.h"
#include "gui/gui_map_interface.h"

#include "city.h"

GuiController* GuiController::guiCtrl = NULL;

/////////////////////////////////////////////////////
//  GuiController::GuiController()
/////////////////////////////////////////////////////
GuiController::GuiController() :
    city(NULL)
{

}

/////////////////////////////////////////////////////
//  void GuiController::init()
/////////////////////////////////////////////////////
void GuiController::init(sf::RenderWindow* window, sfg::Desktop &desktop, Camera* camera, City* city)
{
    this->desktop = &desktop;
    this->camera = camera;
    this->city = city;

    mapInterface = new GuiMapInterface(camera, city, window);
    desktop.Add(mapInterface->toSfgui());

    toolbar = new GuiToolbar(*city);
    desktop.Add(toolbar->toSfgui());

    infobar = new GuiInfoBar(city);
    desktop.Add(infobar->toSfgui());
}

/////////////////////////////////////////////////////
//  void GuiController::update(double dt)
/////////////////////////////////////////////////////
void GuiController::update(double dt)
{
    infobar->update(dt);
    mapInterface->update(dt);
}

/////////////////////////////////////////////////////
//  void GuiController:get()
/////////////////////////////////////////////////////
GuiController* GuiController::get()
{
    if (GuiController::guiCtrl == NULL)
    {
        GuiController::guiCtrl = new GuiController;
    }

    return GuiController::guiCtrl;
}

/////////////////////////////////////////////////////
//  void GuiController:setTool()
/////////////////////////////////////////////////////
void GuiController::setTool(const GuiTool& tool)
{
    mapInterface->setTool(tool);
}
